package apuesta.servlet;

import java.io.IOException;
import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import apuesta.dto.UsuarioDto;
import apuesta.service.UsuarioService;
import apuesta.util.SessionUtil;

public class Usuario extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public Usuario() {
        super();
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    	if(!SessionUtil.ValidarLogin(request, response)){
    		return;
    	}
    	
    	if(request.getParameter("action").equalsIgnoreCase("new")){
    		request.setAttribute("action", "new");
    		request.setAttribute("titulo", "Agregar Usuario");    	
    		request.getRequestDispatcher("/usuario.jsp").forward(request, response);
    	}
    	if(request.getParameter("action").equalsIgnoreCase("edit")){
    		request.setAttribute("action", "edit");
    		request.setAttribute("titulo", "Editar Usuario");
    		request.getRequestDispatcher("/usuario.jsp").forward(request, response);
    	}
    	if(request.getParameter("action").equalsIgnoreCase("search")){
    		request.getRequestDispatcher("/buscarusuario.jsp").forward(request, response);
    	}
    	if(request.getParameter("action").equalsIgnoreCase("carga")){
    		System.out.println("credito: "+request.getParameter("credito")+", "+request.getSession().getAttribute("id"));
    		UsuarioService.cargarcredito(request.getParameter("credito"), request.getSession().getAttribute("id")+"");
    	}

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		if(!SessionUtil.ValidarLogin(request, response)){
    		return;
    	}
		
		if(request.getParameter("action").equalsIgnoreCase("new")){
			RegistrarUsuario(request, response);
		}
		if(request.getParameter("action").equalsIgnoreCase("search")){
			BuscarUsuario(request, response);
		}
		if(request.getParameter("action").equalsIgnoreCase("carga")){
			System.out.println("credito: "+request.getParameter("credito")+", "+request.getSession().getAttribute("id"));
    		UsuarioService.cargarcredito(request.getParameter("credito"), request.getSession().getAttribute("id")+"");
    	}
	}
	
	private void BuscarUsuario(HttpServletRequest request,
			HttpServletResponse response) {
		
		if(Integer.parseInt(request.getParameter("id_tipousuario"))==0 &&
				request.getParameter("nombre_usuario").trim()=="" &&
				request.getParameter("usuario_usuario").trim()==""){
			try {
				List<Object[]> lista = UsuarioService.BuscarUsuariosTodo();
				List<UsuarioDto> listausuario = new ArrayList<UsuarioDto>();
				
				for(int i = 0; i < lista.size(); i++) {
					Object[] obj = (Object[]) lista.get(i);
					UsuarioDto usuarioDto = new UsuarioDto();
					usuarioDto.setId_usuario(Integer.parseInt(obj[0].toString()));
					usuarioDto.setNombres(obj[1].toString());
					usuarioDto.setApellidoPaterno(obj[2].toString());
					usuarioDto.setApellidoMaterno(obj[3].toString());
					usuarioDto.setUsuario(obj[4].toString());
					int tipo = Integer.parseInt(obj[5].toString());
					/*
					switch (tipo) {
					case 100:
						usuarioDto.setTipoUsuarioDescripcion("ADMINISTRADOR");
						break;
					case 101:
						usuarioDto.setTipoUsuarioDescripcion("OPERADOR");
						break;
					default:
						usuarioDto.setTipoUsuarioDescripcion("APOSTADOR");
						break;
					}
					*/
					listausuario.add(usuarioDto);
				}
				
				request.setAttribute("listausuarios", listausuario);
				request.getRequestDispatcher("/buscarusuario.jsp").forward(request, response);
			return;
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		
		
	}

	private void RegistrarUsuario(HttpServletRequest request, HttpServletResponse response){
		UsuarioDto user = new UsuarioDto();
		try {
			
			String mensaje = ValidarDatos(request);
			
			if(mensaje!=""){
    			mensaje = "Los siguientes datos son necesarios: "+ mensaje + "";
    			request.setAttribute("error", mensaje);
    			request.setAttribute("titulo", "Agregar Usuario");
        		request.getRequestDispatcher("/usuario.jsp").forward(request, response);
    			return;
    		}
			
			//user.setTipoUsuario(Integer.parseInt(request.getParameter("id_tipousuario")));
    		user.setNombres(request.getParameter("nombres_usuario").toUpperCase());
    		user.setApellidoPaterno(request.getParameter("apellidopaterno_usuario").toUpperCase());
    		user.setApellidoMaterno(request.getParameter("apellidomaterno_usuario").toUpperCase());
    		DateFormat formatoFecha = new SimpleDateFormat("yyyy-MM-dd");
			user.setFechaNacimiento(new Date(formatoFecha.parse(request.getParameter("fechanacimiento_usuario")).getTime()));
    		user.setFechaRegistro(new Date(new java.util.Date().getTime()));
    		user.setEmail(request.getParameter("email_usuario").toUpperCase());
    		user.setUsuario(request.getParameter("usuario_usuario").toUpperCase());
    		user.setPassword(request.getParameter("password_usuario").toUpperCase());
    		
    		if(UsuarioService.RegistrarUsuario(user)){
    			request.setAttribute("success", "Usuario registrado");
    		}else{
        		request.setAttribute("error", "Ha ocurrido un error al registrar");
    		}
    		
    		request.setAttribute("titulo", "Agregar Usuario");
    		request.getRequestDispatcher("/usuario.jsp").forward(request, response);
    		return;
    		
		} catch (ParseException e) {
			e.printStackTrace();
		} catch (ServletException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}		
		
		

	}

	private String ValidarDatos(HttpServletRequest request) {
		String mensaje="";		
		
		if(Integer.parseInt(request.getParameter("id_tipousuario"))==0){
			mensaje=mensaje + "\n - Tipo de usuario";
		}
		if(request.getParameter("nombres_usuario").trim()==""){
			mensaje=mensaje + "\n - Nombre";
		}
		if(request.getParameter("apellidopaterno_usuario").trim()==""){
			mensaje=mensaje + "\n - Apellido Paterno";
		}
		if(request.getParameter("apellidopaterno_usuario").trim()==""){
			mensaje=mensaje + "\n - Apellido Materno";
		}
		if(request.getParameter("fechanacimiento_usuario")==""){
			mensaje=mensaje + "\n - Fecha de Nacimiento";
		}
		if(request.getParameter("email_usuario").trim()==""){
			mensaje=mensaje + "\n - Email";
		}
		if(request.getParameter("usuario_usuario").trim()==""){
			mensaje=mensaje + "\n - Usuario";
		}
		if(request.getParameter("password_usuario").trim()==""){
			mensaje=mensaje + "\n - Password";
		}
		return mensaje;
	}

}
